﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;

using MySql.Data.MySqlClient;

using MakeIT.MiraPark.Comuns;

namespace MakeIT.MiraPark.Negocios
{
    public static partial class ModelBO
    {
        public static FeriadoVO getFeriado(DateTime data)
        {
            List<FeriadoVO> listFeriadoVOs = getFeriados(data);
            if (listFeriadoVOs != null && listFeriadoVOs.Count > 0)
                return listFeriadoVOs[0];
            else
                return null;
        }

        public static List<FeriadoVO> getFeriados()
        {
            return getFeriados(null);
        }

        public static List<FeriadoVO> getFeriados(DateTime? dataInicial)
        {
            return getFeriados(dataInicial, null);
        }

        public static List<FeriadoVO> getFeriados(DateTime? dataInicial, DateTime? dataFinal)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("SELECT IdFeriado, Feriado, HoraInicial, HoraFinal ");
            query.AppendLine("FROM feriado ");
            if (dataInicial != null && dataFinal != null)
                query.AppendLine("WHERE ADDTIME(Feriado, HoraInicial) <= ?DataFinal AND ADDTIME(Feriado, HoraFinal) >= ?DataInicial ");
            else if (dataInicial != null)
                query.AppendLine("WHERE ?DataInicial BETWEEN ADDTIME(Feriado, HoraInicial) AND ADDTIME(Feriado, HoraFinal) ");
            else if (dataFinal != null)
                query.AppendLine("WHERE ?DataFinal BETWEEN ADDTIME(Feriado, HoraInicial) AND ADDTIME(Feriado, HoraFinal) ");
            query.AppendLine("ORDER BY IdFeriado ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            if (dataInicial != null) cmd.Parameters.AddWithValue("?DataInicial", dataInicial.Value);
            if (dataFinal != null) cmd.Parameters.AddWithValue("?DataFinal", dataFinal.Value);

            MySqlDataReader reader = null;
            try
            {
                cmd.Connection.Open();

                reader = cmd.ExecuteReader();

                List<FeriadoVO> listFeriado = new List<FeriadoVO>();

                while (reader.Read())
                {
                    FeriadoVO feriadoVO = FeriadoVO.CreateFeriadoVO();
                    feriadoVO.idFeriado = reader.GetDateTime("IdFeriado");
                    feriadoVO.feriado = reader.GetString("Feriado");
                    feriadoVO.horaInicial = reader.GetTimeSpan("HoraInicial");
                    feriadoVO.horaFinal = reader.GetTimeSpan("HoraFinal");

                    listFeriado.Add(feriadoVO);
                }
                reader.Close();
                return listFeriado;
            }
            catch (Exception ex){ throw ex; }
            finally { cmd.Connection.Close(); }
        }

        public static void setFeriado(FeriadoVO feriadoVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("UPDATE feriado ");
            query.AppendLine("SET Feriado=?Feriado, HoraInicial=?HoraInicial, HoraFinal=?HoraFinal ");
            query.AppendLine("WHERE IdFeriado=?IdFeriado ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdFeriado", feriadoVO.idFeriado);
            cmd.Parameters.AddWithValue("?Feriado", feriadoVO.feriado);
            cmd.Parameters.AddWithValue("?HoraInicial", feriadoVO.horaInicial);
            cmd.Parameters.AddWithValue("?HoraFinal", feriadoVO.horaFinal);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static DateTime newFeriado(FeriadoVO feriadoVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("INSERT INTO feriado ");
            query.AppendLine("SET IDFeriado=?IdFeriado, Feriado=?Feriado, HoraInicial=?HoraInicial, HoraFinal=?HoraFinal ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdFeriado", feriadoVO.idFeriado);
            cmd.Parameters.AddWithValue("?Feriado", feriadoVO.feriado);
            cmd.Parameters.AddWithValue("?HoraInicial", feriadoVO.horaInicial);
            cmd.Parameters.AddWithValue("?HoraFinal", feriadoVO.horaFinal);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
                return feriadoVO.idFeriado;
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static void delFeriado(FeriadoVO feriadoVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("DELETE FROM feriado ");
            query.AppendLine("WHERE IdFeriado=?IdFeriado ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdFeriado", feriadoVO.idFeriado);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }
    }
}
